package jwr.basic;

public class J12_AccessModifier {
	String defaultname;
	private String privateName;
	protected String protectedName;
	public String publicName;
	
	String defaultHello(){
		return "hello";
	}
	private String privateHello(){
		return "hello";
	}
	protected String protectedHello(){
		return "hello";
	}
	public String publicHello(){
		return "hello";
	}

	public static void main(String[] args) {
		
		// 멤버 변수
		
		// 접근 지정자 : access modifier
		// 객체 지향 3가지 특성 중 캡슐화와 관련
		// default, private, protected, publc
		
		// default로 선언된 클래스에 대한 객체 선언
		// 같은 패키지내에 J12_AccessModifier과 J12_DefaultClass이 존재하므로 접근 가능
		J12_DefaultClass df = new J12_DefaultClass();
		df.name = "조우람";
		System.out.println(df.name);
		System.out.println(df.sayHello());
		
		// private로 선언된 멤버변수/메서드 접근
		// private로 선언된 멤버변수와 메서드는 현재 클래스 내에서만 접근 가능하고
		// 외부클래스에선 접근 불가능
		J12_PrivateAccessor pr = new J12_PrivateAccessor();
//		pr.name = "조우람";
//		pr.sayHello();
		
		// protected로 선언된 멤버변수/메서드 접근 (중요!)
		J12_ProtectedAccessor pt = new J12_ProtectedAccessor();
		pt.name = "조우람";
		pt.sayHello();
		
		// public로 선언된 멤버변수/메서드 접근
		J12_PublicAccessor pb = new J12_PublicAccessor();
		pb.name = "조우람";
		pb.sayHello();
		// 
		
		
	}//main

}//class

// 접근 지정자가 default로 선언된 클래스
class J12_DefaultClass{
	//접근지정자가 default로 선언된 멤버변수
	String name;
	//접근지정자가 default로 선언된 메서드
	String sayHello(){
		return "Hello!!";
	}
}// class J12_DefaultClass

class J12_PrivateAccessor {
	//접근 지정자가 private으로 선언된 멤버 변수
	private String name;
	//접근 지정자가 private으로 선언된 멤버 변수
	private String sayHello(){
		return "hello";
	}
} // class J12_PrivateAccessor

class J12_ProtectedAccessor {
	//접근 지정자가 protected으로 선언된 멤버 변수
	protected String name;
	//접근 지정자가 protected으로 선언된 멤버 변수
	protected String sayHello(){
		return "hello";
	}
} // class J12_ProtectedAccessor

class J12_PublicAccessor {
	//접근 지정자가 public으로 선언된 멤버 변수
	public String name;
	//접근 지정자가 public으로 선언된 멤버 변수
	public String sayHello(){
		return "hello";
	}
} // class J12_PublicAccessor

